package com.cs.beneficios.web.action;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.common.ConnectionFactory;
//import com.cs.beneficios.web.form.AtributoSubprogramaForm;
import com.cs.paoyer.administration.business.model.UserVO;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
//import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForward;
//import org.apache.struts.action.ActionError;
//import org.apache.struts.action.ActionErrors;
import java.io.IOException;
import javax.servlet.ServletException;
import com.cs.beneficios.common.entity.Consultas;

public class InsertarAtributoAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
      //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
	  ConnectionFactory cf = new ConnectionFactory();
      Consultas objCons = new Consultas(cf);
      try{
          HttpSession session = request.getSession();

          session.setAttribute("Mostrar","1");
          String sub = (String)session.getAttribute("subprograma");
         
          List lNombre = new LinkedList();
          List lError = new LinkedList();
          List lConvertirGene = new LinkedList();
          List lCamposOblig = new LinkedList();
          Collection coInsertarAtri = new LinkedList();
          
          //Proceso para la auditoria
          UserVO user = (UserVO) session.getAttribute("userInfo");
          String terminalAddress = request.getRemoteAddr();
          String strTerminal = ("WEB="+terminalAddress);
          Calendar ca = Calendar.getInstance(); 
          SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
          //Fin del proceso
          
          // Proceso para el ingreso de atributos genericos
          Collection c = objCons.getAtributoGenerico(sub);
          int iTamano=c.size();
          //System.out.println(iTamano);          
          for (int i=1;i<=iTamano;i++)
          {
             String strCodigoAtriGen = request.getParameter("opcion"+i);
             
             if(strCodigoAtriGen!=null)
             {
                String strArr2[] = {user.getName(), dateFormat.format(ca.getTime()),strTerminal,user.getName(),dateFormat.format(ca.getTime()),strTerminal};
                int InsertAtriGenerico= objCons.InsertAtributoGenerico(strCodigoAtriGen,sub,strArr2);
             }
             session.setAttribute("Mostrar","1");
          }
          // Fin del proceso
          
          
          AtributoVO objatri = null;    
          for(int i=1;i<6;i++)
          {
              int sw = 0;
              List lComparacion = new LinkedList();
              
              //Proceso para validar los campos obligatorios
              Object obNombre = (Object)request.getParameter("nombre"+i);
              if(!obNombre.equals(""))
              {
                lComparacion.add(obNombre);
              }
              Object obOrden = (Object)request.getParameter("orden"+i);
              if(!obOrden.equals(""))
              {
                lComparacion.add(obOrden);
              }
              Object obEtiqueta = (Object)request.getParameter("etiqueta"+i);
              if(!obEtiqueta.equals(""))
              {
                lComparacion.add(obEtiqueta);
              }
              Object obDescrip = (Object)request.getParameter("descripcion"+i);
              if(!obDescrip.equals(""))
              {
                lComparacion.add(obDescrip);
              }
              int icompara = lComparacion.size();
              if(icompara==0)
              {
                Object oblong = (Object)request.getParameter("longitud"+i);
                if(!oblong.equals(""))
                {
                  lComparacion.add(oblong);
                }
              }
              
              int icomparacion = lComparacion.size();
             // System.out.println(icomparacion);
              if(icomparacion==0 || icomparacion==4)
              {
                  String strNombre = request.getParameter("nombre"+i);
                  String strOrden = request.getParameter("orden"+i);
                  String strEtiqueta = request.getParameter("etiqueta"+i); 
                  
                  if(!strOrden.equals("") && !strNombre.equals(""))
                  {
                    int iOrdenMin=Integer.valueOf(strOrden).intValue();
                
                    if(iOrdenMin >299)
                    {
                    
                        Object obListaAtri = (Object)session.getAttribute("ListaAtributos");
                        Object obConvertir = (Object)request.getParameter("convertir"+i);
                        AtributoVO objAtriVO = null;
                        //valido que si es la primera vez no entre
                        if(obListaAtri!=null)
                        {
                          List lListaAtributos = (List)session.getAttribute("ListaAtributos");
                          int tamanolistaatri = lListaAtributos.size();
                          for(int j=0;j<tamanolistaatri;j++)
                          {
                            objAtriVO = (AtributoVO)lListaAtributos.get(j);
                            String strnomcom = objAtriVO.getNombre();
                            String strordencom = objAtriVO.getOrden();
                            // Proceso para validar que el orden y el nombre sean diferentes
                            if(strNombre.equals(strnomcom) || strOrden.equals(strordencom))
                            {
                              sw = 1;
                              session.setAttribute("Mostrar","3");
                              lError.add(strEtiqueta);
                              lError.add(strOrden);
                            }
                          }
                        }
                        // fin del proceso
                        
                       if(!strNombre.equalsIgnoreCase("") && sw==0)
                       {
                        
                        objatri = new AtributoVO();
                        objatri.setTipoatributo(request.getParameter("tipo_atributo"+i));;
                        objatri.setNombre(request.getParameter("nombre"+i));
                        objatri.setOrden(request.getParameter("orden"+i));
                        objatri.setLongitud(request.getParameter("longitud"+i));
                        objatri.setObligatorio(request.getParameter("obligatorio"+i));
                        objatri.setEtiqueta(request.getParameter("etiqueta"+i));
                        objatri.setValLista(request.getParameter("validar_lista"+i));
                        objatri.setDescripcion(request.getParameter("descripcion"+i));
                        objatri.setTipodato(request.getParameter("tipo_dato"+i));
                            
                        coInsertarAtri.add(objatri);
                        
                        int Orden = objCons.getOrden(objatri.getOrden(),sub);
                        int Nomb = objCons.getNombre(objatri.getNombre(),sub);
                        int iLong = 0;
                        
                        if(Integer.parseInt(objatri.getLongitud().trim()) >500)
                        {
                          iLong = 1;
                        }
                         
                         if (Orden == 0 && Nomb == 0 && iLong == 0)
                         {
                          
                           if(obConvertir!=null)
                           {
                            lConvertirGene.add(request.getParameter("nombre"+i));
                            
                           }
                         }else
                         {
                           session.setAttribute("Mostrar","3");
                           Object obError = (Object)lError;
                           int tamaerror = lError.size();
                           lError = new LinkedList();
                         
                           lError.add(objatri.getEtiqueta());
                           lError.add(strOrden);  
                                    
                         }
                       }
                       //envio la lista donde almaceno los atributos a ingresar
                       session.setAttribute("ListaAtributos",coInsertarAtri);
                    }else
                    {
                      session.setAttribute("Mostrar","3");
                      lError.add(strEtiqueta);
                      lError.add(strOrden);
                    }
                  }
                    
                  
              }else
              {
                   session.setAttribute("Mostrar","3");
                   session.setAttribute("TipoError","2");
                   int sw1=0;
                   if(!(request.getParameter("etiqueta"+i)).equals("") && sw1==0)
                   {
                     lCamposOblig.add(request.getParameter("etiqueta"+i));
                     sw1=1;
                   }
                   if(!(request.getParameter("nombre"+i)).equals("") && sw1==0)
                   {
                     lCamposOblig.add(request.getParameter("nombre"+i));
                     sw1=1;
                   }
                   if(!(request.getParameter("descripcion"+i)).equals("") && sw1==0)
                   {
                     lCamposOblig.add(request.getParameter("descripcion"+i));
                     sw1=1;
                   }
                   if(!(request.getParameter("orden"+i)).equals("") && sw1==0)
                   {
                     lCamposOblig.add(request.getParameter("orden"+i));
                     sw1=1;
                   }
                   
                   session.setAttribute("ListaCamposObli",lCamposOblig);
              }
          }
          
          // Proceso para insertar los atributos del subprograma
          int tamanolist = coInsertarAtri.size();
          if(tamanolist == 0)
          {
            //System.out.println("no hay atributos que insertar");
          }else
          {
            
            List lLisAtri = (List)coInsertarAtri;
            AtributoVO objatributo = null;
            for (int i=0;i<tamanolist;i++)
            {
              objatributo = (AtributoVO)lLisAtri.get(i);
              String strNomespe= objatributo.getNombre();
              int continuar = 0;
              if(lError.size()>0)
              {
                int t = 0;
                while(t < lError.size())
                {
                  String nombre1 = (String)lError.get(t);
                  t+=2;
                  if(strNomespe.equals(nombre1))
                  {
                    continuar = 1;
                  }
                }
              } 
              if(continuar == 0)
              {
                String strArr[] = {objatributo.getTipoatributo(),objatributo.getNombre().trim(),objatributo.getDescripcion().trim(),
                                   objatributo.getOrden(),objatributo.getTipodato(),objatributo.getLongitud(),
                                   objatributo.getObligatorio(),objatributo.getEtiqueta().trim(),objatributo.getValLista(),
                                   user.getName(), dateFormat.format(ca.getTime()),strTerminal,user.getName(),dateFormat.format(ca.getTime()),strTerminal};
                lNombre.add(objatributo.getNombre());
                int bInsertAtributo= objCons.InsertAtributo(strArr,sub);
              }          
              // Proceso para ingresar los atributos especificos que se convirtieron en generales
              Object obConvertirEspGen = (Object)lConvertirGene;
              if(obConvertirEspGen != null)
              {
                
                int tamanocon = lConvertirGene.size();
                for(int k=0; k<tamanocon;k++)
                {
                  String strNomconvertir = (String)lConvertirGene.get(k);
                  if(strNomespe.equals(strNomconvertir))
                  {
                     int iOrdenMax = objCons.getOrdenAtriGene();
                     String strOrdenGene=String.valueOf(iOrdenMax);
                      String strArrGen[] = {objatributo.getTipoatributo(),strNomespe.trim(),
                                                objatributo.getDescripcion().trim(),strOrdenGene,
                                                objatributo.getTipodato(),objatributo.getLongitud(),
                                                objatributo.getObligatorio(),objatributo.getEtiqueta().trim(),
                                                objatributo.getValLista(),
                                                user.getName(), dateFormat.format(ca.getTime()),strTerminal,
                                                user.getName(),dateFormat.format(ca.getTime()),strTerminal};
                     int bInsertAtributoGene= objCons.InsertAtributoGene(strArrGen);
                     List lCodsMaxAtri = (List)objCons.CodMaxAtriGene();
                     int CodAtriEspMax = Integer.valueOf((String)lCodsMaxAtri.get(0)).intValue();
                     int CodAtriGenMax = Integer.valueOf((String)lCodsMaxAtri.get(1)).intValue();
                     int ActualizoBienAtri = objCons.ActualizarCampoUno(CodAtriEspMax,CodAtriGenMax);
                  }
                }
              }
              // Fin del proceso
              
            }
          }
            
          // Fin del Proceso
        
          if(((Object)lError)!=null)
          {
            int iTamanoError = lError.size();
            if (iTamanoError != 0)
            {
               session.setAttribute("ListaError",lError);
            }
          
            session.setAttribute("ListaNombre",lNombre);
            int iTamanoValidar=lNombre.size();
            if (iTamanoValidar!=0)
            {
               Collection val = objCons.getAtriValidarLista(lNombre,sub); 
               request.setAttribute("tamano",val.size()+"");
               request.setAttribute("dominios",val);
            }
          }
          try
          {
            cf.closeConnection(objCons.getConn());
          }catch(SQLException e)
          {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSUB - cwsub ********/");
          }
      }catch(Exception e)
      {
		System.err.println("/******** TDSUB - cwsub");
		e.printStackTrace();
		System.err.println("TDSUB - cwsub ********/");
      }finally
      {
        try{
          cf.closeConnection(objCons.getConn());
        }catch(SQLException e)
        {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSUB - cwsub ********/");
        }
      }
      return mapping.findForward("success");
  }
}
  
  
  
